package modelo;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import bean.CotizacionVO;
import bean.ItemCotizacionVO;


public class Cotizacion {

	private int nroCotizacion;
	private Date fechaEmision;
	private Date validoHasta;
	private float descuentoVip;
	private String observaciones;
	private Cliente cliente = new Cliente();
	private Estado estado = new Estado();
	private List<ItemCotizacion> items = new ArrayList<ItemCotizacion>();
	private List<PoliticaBeneficio> politicas = new ArrayList<PoliticaBeneficio>();
	private CondicionDePago condicionDePago = new CondicionDePago();

	
	public int getNroCotizacion() {
		return nroCotizacion;
	}

	public void setNroCotizacion(int nroCotizacion) {
		this.nroCotizacion = nroCotizacion;
	}

	public Date getFechaEmision() {
		return fechaEmision;
	}

	public void setFechaEmision(Date fechaEmision) {
		this.fechaEmision = fechaEmision;
	}

	public Date getValidoHasta() {
		return validoHasta;
	}

	public void setValidoHasta(Date validoHasta) {
		this.validoHasta = validoHasta;
	}

	public float getDescuentoVip() {
		return descuentoVip;
	}

	public void setDescuentoVip(float descuentoVip) {
		this.descuentoVip = descuentoVip;
	}

	public String getObservaciones() {
		return observaciones;
	}

	public void setObservaciones(String observaciones) {
		this.observaciones = observaciones;
	}

	
	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	
	public Estado getEstado() {
		return estado;
	}

	public void setEstado(Estado estado) {
		this.estado = estado;
	}

	
	public List<ItemCotizacion> getItems() {
		return items;
	}

	public void setItems(List<ItemCotizacion> items) {
		this.items = items;
	}

	
	public List<PoliticaBeneficio> getPoliticas() {
		return politicas;
	}

	public void setPoliticas(List<PoliticaBeneficio> politicas) {
		this.politicas = politicas;
	}

	
	public CondicionDePago getCondicionDePago() {
		return condicionDePago;
	}

	public void setCondicionDePago(CondicionDePago condicionDePago) {
		this.condicionDePago = condicionDePago;
	}

	public void agregarItem(Rodamiento r, int cant, float precio) {

		ItemCotizacion i = new ItemCotizacion();
		i.setRodamiento(r);
		i.setCantidad(cant);
		i.setPrecio(precio);
		items.add(i);
		
	}

	public void setBeneficios() {

	}

	public float calcularSubtotal() {
		float total = 0;
		for(ItemCotizacion i :items)
			total += i.calcularSubTotal();
		return  total;
	}
		
	public float calcularSubtotalConDesc(){
				
		return this.calcularSubtotal()* (1- this.getDescuentoVip()) ;
		
	}
	
	public float calcularIVA(){
		return this.calcularSubtotalConDesc()* (float)0.21;
	}
	

	public float calcularTotal(){
		return this.calcularSubtotalConDesc()+ this.calcularIVA() ;
	}
	
	
	public ItemCotizacion buscarItem(String codigo, String caract, String marca, String origen, int cant){
		ItemCotizacion result = null;
		
		if(!codigo.isEmpty() && !caract.isEmpty() && !marca.isEmpty() && !origen.isEmpty())
			return this.buscarItem4(codigo,caract,marca,origen, cant);
		else{
		if(!codigo.isEmpty() && !caract.isEmpty() && !marca.isEmpty() )
			return this.buscarItem3(codigo,caract,marca, cant);
		else{
		if(!codigo.isEmpty() && !caract.isEmpty())
			return this.buscarItem2(codigo,caract, cant);
		else
			if(!codigo.isEmpty() )
			return this.buscarItem1(codigo, cant);
		return result;
		 }
		}
	}
	
	
	private ItemCotizacion buscarItem4(String cod, String car, String marca, String origen, int cant){
		ItemCotizacion result = null;
		System.out.println("busca4");
		for(ItemCotizacion ic : items){
			if((ic.getRodamiento().getIdRodamiento().getCodigo()).equalsIgnoreCase(cod)
					&& ic.getRodamiento().getIdRodamiento().getCaracteristica().equalsIgnoreCase(car)
					&& ic.getRodamiento().getIdRodamiento().getMarca().equalsIgnoreCase(marca)
					&& ic.getRodamiento().getIdRodamiento().getOrigen().equalsIgnoreCase(origen)
					&& ic.getCantidad() == cant )  //  comentar para que el pedido se haga  con distintas cantidades que la cotizacion
				result = ic;
	
		}
		return result;	
	}
	
	private ItemCotizacion buscarItem3(String cod, String car, String marca, int cant){
		ItemCotizacion result = null;
		System.out.println("busca3");
		for(ItemCotizacion ic : items){
			if((ic.getRodamiento().getIdRodamiento().getCodigo()).equalsIgnoreCase(cod)
					&& ic.getRodamiento().getIdRodamiento().getCaracteristica().equalsIgnoreCase(car)
					&& ic.getRodamiento().getIdRodamiento().getMarca().equalsIgnoreCase(marca)
			        && ic.getCantidad() == cant )    ///////////////////////////////////////// comentar para que el pedido se haga  con distintas cantidades  que la cotizacion
				result = ic;
		}
		return result;	
	}
	
	private ItemCotizacion buscarItem2(String cod, String car, int cant){
		ItemCotizacion result = null;
		System.out.println("busca2");
		for(ItemCotizacion ic : items){
			if((ic.getRodamiento().getIdRodamiento().getCodigo()).equalsIgnoreCase(cod)
					&& ic.getRodamiento().getIdRodamiento().getCaracteristica().equalsIgnoreCase(car)
			        && ic.getCantidad() == cant)///////////////////////////// idem
				result = ic;
		}
		return result;	
	}
	
	private ItemCotizacion buscarItem1(String cod, int cant){
		ItemCotizacion result = null;
		System.out.println("busca1");
		for(ItemCotizacion ic : items){
			if((ic.getRodamiento().getIdRodamiento().getCodigo()).equalsIgnoreCase(cod)
			&& ic.getCantidad() == cant)/////////////////////////////////// idem
				result = ic;
		}
		return result;	
	}
	
		
	public List<ItemCotizacionVO> itemsToVO(){
		
		List<ItemCotizacionVO> itemsVO = new ArrayList<ItemCotizacionVO>();
		for(ItemCotizacion i : items)
			itemsVO.add(i.toVO());
		return itemsVO;
	}
		
	
	public CotizacionVO toVO (){
		
		CotizacionVO  cVO = new CotizacionVO();
		cVO.setCliente(this.getCliente().toVO());
		cVO.setCondicionDePago(this.getCondicionDePago().toVO());
		cVO.setDescuentoVip(this.descuentoVip);
		cVO.setEstado(this.getEstado().toVO());
		cVO.setFechaEmision(this.fechaEmision);
		cVO.setItems(this.itemsToVO());
		cVO.setNroCotizacion(this.nroCotizacion);
		cVO.setObservaciones(this.observaciones);
		cVO.setValidoHasta(this.validoHasta);
		cVO.setSubtotal(this.calcularSubtotal());
		cVO.setSubtotalConDesc(this.calcularSubtotalConDesc());
		cVO.setIva(this.calcularIVA());
		cVO.setTotal(this.calcularTotal());
		return cVO;
		
	}
	
	public String toString(){
		
		return  "nro Cotizacion : "+this.getNroCotizacion()+ "\n"
		      + "cuit cliente : " + this.getCliente().getCuit() ;
		
	}
	
}
